package com.shujia.wyh;

import com.mysql.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/*
    驱动注册的第二种方式
 */
public class JDBCTest2 {
    public static void main(String[] args) throws Exception {
        //使用反射的第三种方式直接获取mysql数据库的驱动类,今后最常用的方式
        Class.forName("com.mysql.jdbc.Driver");

        Connection conn = null;
        Statement state = null;


        //1.注册驱动（告诉Java程序，即将连接的是哪个品牌的数据库）
        //第一种注册驱动的方式
        //jdk本身提供了一个工具类DriverManager给我们使用，其中有一个方法用于注册驱动的作用，registerDriver(Driver driver)
        //注册与给定的驱动程序 DriverManager 。  可以实现注册驱动的功能
        //通过观察发现，jdk本身没有实现Driver接口的实现，但是我们在mysql驱动包中找到了实现该接口的实现类。
        try {
//            DriverManager.registerDriver(new Driver());
            //2.获取连接（表示JVM的进程和数据库进程之间的通道打开了，这属于进程之间的通信，使用完后记得关闭通道）。
            //jdk中提供了一个工具类DriverManager，其中有一个静态的方法，可以让我们调用并且获取与要使用的数据的连接对象
            //static Connection getConnection(String url, String user, String password)
            //尝试建立与给定数据库URL的连接。
            /**
             * url: 统一资源定位系统
             *      http/https  通过网络去请求网络上的资源
             *      jdbc:mysql  驱动包提供的请求头
             *      请求的地址    指定mysql数据库安装的服务器地址：192.168.169.100
             *      端口号       3306
             *      useUnicode=true&characterEncoding=utf8
             *
             * jdbc:mysql://192.168.169.100:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=false
             */
            //mysql5.7之后警告用户不要直接访问数据库服务器
            String url = "jdbc:mysql://192.168.169.100:3306/bigdata23?useUnicode=true&characterEncoding=utf8&useSSL=false";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url, user, password);
            //如果连接不上可能导致的问题
            //1、检查虚拟机，服务器是否启动
            //2、检查防火墙是否关闭，指的是虚拟机或者服务器的防火墙
            //3、检查url地址，用户名，密码
            System.out.println("与mysql数据库建立连接成功！！" + conn);

            //3.获取数据库操作对象（专门执行sql语句的对象）
            state = conn.createStatement();

            //4.执行SQL语句（DQL,DML…）
            //DQL
            //ResultSet executeQuery(String sql)
            //执行sql语句，该语句返回查询的结果，只能是查（select）

            //DML
            //int executeUpdate(String sql)
            //执行给定的SQL语句，这里可以是增（insert）,删（delete）,更新（update）
            //该方法的返回值指的是受影响的行数
//            String sql1 = "insert into dept(deptno,dname,loc) values(60,'教学部','安徽合肥')";
//            int count = state.executeUpdate(sql1);
//            if (count == 1) {
//                System.out.println("数据保存成功！！");
//            } else {
//                System.out.println("数据保存失败！！");
//            }

            //修改
//            String sql2 = "update dept set loc='合肥' where deptno=60";
//            int count2 = state.executeUpdate(sql2);
//            if (count2 == 1) {
//                System.out.println("数据修改成功！！");
//            } else {
//                System.out.println("数据修改失败！！");
//            }

            //删除
            String sql3 = "delete from dept where deptno=60";
            int count3 = state.executeUpdate(sql3);
            if (count3 == 1) {
                System.out.println("数据删除成功！！");
            } else {
                System.out.println("数据删除失败！！");
            }


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6.释放资源（使用完资源后一定要关闭资源，Java和数据库之间属于进程间的通信，开启之后一定要记得关闭）
            if (state != null) {
                try {
                    state.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}
